package jp.ircbot.kaitvip.common;

import java.util.List;

import jp.ircbot.kaitvip.common.bean.PickedMessageBean;
import jp.ircbot.kaitvip.common.bean.SendMessageBean;
import jp.ircbot.kaitvip.facade.TestFacade;
import jp.ircbot.kaitvip.facade.ViewHelpFacade;

public abstract class SuperFacade {

	// 起動メッセージ情報
	protected PickedMessageBean messageBean;

	/**
	 * Facade作成
	 *
	 * @param _messageBean
	 * @return
	 */
	public static SuperFacade getNewInstance(PickedMessageBean _messageBean) {

		// TODO このメソッドももうちょっとなんとかできそう
		SuperFacade facadeObj = null;
		String message = _messageBean.getMessage();

		// 判定

		if (message.matches("^ヘルプ表示$")) {
			facadeObj = new ViewHelpFacade();
		} else if (message.matches("^テスト$")) {
			facadeObj = new TestFacade();
		}

		/*
		 * // ヘルプ表示 if(viewHelpAll(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // チャンネル参加
		 * if(joinChanelByMsg(channel,sender,login,hostname,message)){ return; }
		 *
		 * // チャンネル退出
		 * if(exitChanelByMsg(channel,sender,login,hostname,message)){ return; }
		 *
		 * // なると機能 if(giveNaruto(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // 学習機能 if(registReturnMsg(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // 取消し機能 if(deleteReturnMsg(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // 伝言機能 if(registDengonMsg(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // HTTP機能
		 * if(getHttpUrlSiteData(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // 計算機能 if(calcStrData(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // ツイッター機能 if(getTwitterMsg(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // 座布団機能 if(updateZabuton(channel,sender,login,hostname,message)){
		 * return; }
		 *
		 * // URL履歴表示 if(showUrl(channel,message)){ return; } //
		 * メッセージ内に特定キーワードがあると返答
		 * autoReturnMsg(channel,sender,login,hostname,message);
		 */

		// MessageBeanセット
		if (facadeObj != null) {
			facadeObj.setMessageBean(_messageBean);
		}

		return facadeObj;

	}

	/**
	 * 実処理
	 *
	 * @return botの発言情報
	 */
	abstract public List<SendMessageBean> execute();

	/**
	 * @param messageBean
	 *            セットする messageBean
	 */
	public final void setMessageBean(PickedMessageBean messageBean) {
		this.messageBean = messageBean;
	}

}
